package com.pe.pgn.clubpgn.domain;

import java.math.BigDecimal;
import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.annotations.Type;
import org.springframework.format.annotation.DateTimeFormat;

import com.pe.pgn.clubpgn.common.CLPConstantes;

@Entity
@Table(name = "clpb_promocion_bono")
public class ClpbPromocionBono extends CamposAuditoria{

	private static final long serialVersionUID = 2001023565464363712L;
	private Long id;
	private String deNombre;
	private Calendar daInicioVigencia;
	private Calendar daFinVigencia;
	private ClpdTipoBono clpdTipoBono = new ClpdTipoBono();
	private BigDecimal vaMontoMinimo;
	private boolean stPromocionBono;
	private boolean stCaducarBono;
	private boolean stBloqueado;
	
	private String inicioVigencia;
	private String finVigencia;
	private String strPromocionBono;
	private String strCaducarBono;
	private String strBloqueado;
	private String coTipoBono;
	private String deTipoBono;
	private String vaTipoBono;
	
	@Id
    @Column(name="id")
    @SequenceGenerator(name="seqpromobono", sequenceName="seq_promo_bono")
    @GeneratedValue(generator="seqpromobono")
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@Column(name = "de_nombre", nullable = false, length = 50)
	public String getDeNombre() {
		return deNombre;
	}

	public void setDeNombre(String deNombre) {
		this.deNombre = deNombre;
	}

	@Column(name = "da_inicio_vigencia", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaInicioVigencia() {
		return daInicioVigencia;
	}

	public void setDaInicioVigencia(Calendar daInicioVigencia) {
		this.daInicioVigencia = daInicioVigencia;
	}

	@Column(name = "da_fin_vigencia", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFinVigencia() {
		return daFinVigencia;
	}

	public void setDaFinVigencia(Calendar daFinVigencia) {
		this.daFinVigencia = daFinVigencia;
	}

	@ManyToOne(targetEntity = ClpdTipoBono.class)
    @JoinColumn(name="co_tipo_bono", nullable = false)
	public ClpdTipoBono getClpdTipoBono() {
		return clpdTipoBono;
	}

	public void setClpdTipoBono(ClpdTipoBono clpdTipoBono) {
		this.clpdTipoBono = clpdTipoBono;
	}

	@Column(name = "va_monto_minimo")
	public BigDecimal getVaMontoMinimo() {
		return vaMontoMinimo;
	}

	public void setVaMontoMinimo(BigDecimal vaMontoMinimo) {
		this.vaMontoMinimo = vaMontoMinimo;
	}

	@Column(name = "st_promocion_bono", nullable = false)
	@Type(type = "yes_no")
	public boolean isStPromocionBono() {
		return stPromocionBono;
	}

	public void setStPromocionBono(boolean stPromocionBono) {
		this.stPromocionBono = stPromocionBono;
	}

	@Column(name = "st_caducar_bono", nullable = false)
	@Type(type = "yes_no")
	public boolean isStCaducarBono() {
		return stCaducarBono;
	}

	public void setStCaducarBono(boolean stCaducarBono) {
		this.stCaducarBono = stCaducarBono;
	}
	
	@Column(name = "st_bloqueado", nullable = false)
	@Type(type = "yes_no")
	public boolean isStBloqueado() {
		return stBloqueado;
	}

	public void setStBloqueado(boolean stBloqueado) {
		this.stBloqueado = stBloqueado;
	}

	@Column(name = "co_usuario_creador", updatable = false, nullable = false, length = 30)
	public String getCoUsuarioCreador() {
		return coUsuarioCreador;
	}

    @Column(name = "da_fecha_creacion", updatable = false, nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaCreacion() {
		return daFechaCreacion;
	}

	@Column(name = "co_usuario_modificador", length = 30)
	public String getCoUsuarioModificador() {
		return coUsuarioModificador;
	}

    @Column(name = "da_fecha_modificacion")
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "S-")
	public Calendar getDaFechaModificacion() {
		return daFechaModificacion;
	}

    @Transient
	public String getInicioVigencia() {
		return inicioVigencia;
	}

	public void setInicioVigencia(String inicioVigencia) {
		this.inicioVigencia = inicioVigencia;
	}

	@Transient
	public String getFinVigencia() {
		return finVigencia;
	}

	public void setFinVigencia(String finVigencia) {
		this.finVigencia = finVigencia;
	}
	
	@Transient
	public String getStrPromocionBono() {
		return strPromocionBono;
	}

	public void setStrPromocionBono(String strPromocionBono) {
		this.strPromocionBono = strPromocionBono;
		
		if(CLPConstantes.ST_VERDADERO.equals(strPromocionBono)){
			this.stPromocionBono = true;
		}else if(CLPConstantes.ST_FALSO.equals(strPromocionBono)){
			this.stPromocionBono = false;
		}
	}

	@Transient
	public String getStrCaducarBono() {
		return strCaducarBono;
	}

	public void setStrCaducarBono(String strCaducarBono) {
		this.strCaducarBono = strCaducarBono;
		
		if(CLPConstantes.ST_VERDADERO.equals(strCaducarBono)){
			this.stCaducarBono = true;
		}else if(CLPConstantes.ST_FALSO.equals(strCaducarBono)){
			this.stCaducarBono = false;
		}
	}
	
	@Transient
	public String getCoTipoBono() {
		return coTipoBono;
	}

	public void setCoTipoBono(String coTipoBono) {
		this.coTipoBono = coTipoBono;
	}
	
	@Transient
	public String getDeTipoBono() {
		return deTipoBono;
	}

	public void setDeTipoBono(String deTipoBono) {
		this.deTipoBono = deTipoBono;
	}
	
	@Transient
	public String getVaTipoBono() {
		return vaTipoBono;
	}

	public void setVaTipoBono(String vaTipoBono) {
		this.vaTipoBono = vaTipoBono;
	}
	
	@Transient
	public String getStrBloqueado() {
		return strBloqueado;
	}

	public void setStrBloqueado(String strBloqueado) {
		this.strBloqueado = strBloqueado;
	}

	@Override
	public boolean equals(Object o) {
		return false;
	}

	@Override
	public int hashCode() {
		return 0;
	}

	@Override
	public String toString() {
		return null;
	}
}
